#include <iostream>
#include <memory>
#include <vector>
#include <functional>
#include <unordered_map>

/* 时间轮中的每一个任务
1. 有自己的处理函数
2. 可以进行取消任务执行
*/
using taskfunc = std::function<void()>;
class TimerTask
{
private:
    taskfunc _taskfunc; //处理函数
    bool _iscancle; //是否取消处理函数
    uint64_t _timeout;  //超时时间
public:
    TimerTask()
        :_iscancle(false),_timeout(0)
        {}
    void SetTaskFunc(taskfunc func){_taskfunc = func;}
    void SetCancle() { _iscancle = true;}
    ~TimerTask()
    {
        //如果没有取消任务处理
        if (!_iscancle){
            _taskfunc();
        }
    }
};
/*
weak_ptr.lock 可以获取保存的shared_ptr，如果没有就返回空指针
shared_ptr.reset()可以手动释放智能指针
*/
class TimerWheel
{
private:
    std::vector<std::shared_ptr<TimerTask>> _time_wheels; //时间轮
    std::unordered_map<uint64_t,std::weak_ptr<TimerTask>> _save_task; //保存任务的
    
};






int main()
{

    return 0;
}